#ifndef __MODEL_H__
#define __MODEL_H__

namespace learn {

struct Model {
	virtual ~Model() { }
	virtual int getParameterCount() = 0;
	virtual int getInputCount() = 0;
	virtual int getOutputCount() = 0;
	virtual void setParameters(float *values, int offset, int count) = 0;
	virtual void getParameters(float *outValues, int offset, int count) = 0;
	
	virtual void run(float *input, float *output) = 0;
	virtual void getDerivative(float *input, float *outDerivative) = 0;
};

}

#endif // __MODEL_H__